home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / d / mtdials.d < prev    next >
Text File  |  1997-10-26  |  17KB  |  397 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *  MAGICTOOLS   Modula's  All purpose  GEM  Interface  Cadre  Toolbox  *
  4.  *               ÿ         ÿ            ÿ    ÿ          ÿ               *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus, sowie die   *
  11.  * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
  12.  * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail-    *
  13.  * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen    *
  14.  * Einverst„ndnisserkl„rung des Autors.                                 *
  15.  *                                                                      *
  16.  * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist    *
  17.  * fr Lizenznehmer ausdrcklich erlaubt!  Der Autor beh„lt sich das    *
  18.  * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
  19.  * widerrufen.                                                          *
  20.  *----------------------------------------------------------------------*)
  21.  
  22. (*----------------------------------------------------------------------*
  23.  * mtDials      'magische' Dialoge...                                   *
  24.  *----------------------------------------------------------------------*)
  25.  
  26. DEFINITION MODULE mtDials;
  27.  
  28. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  29.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  30.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  31.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
  32.  
  33. FROM MagicAES   IMPORT PtrPARMBLK; 
  34.  
  35.  
  36. IMPORT SYSTEM;
  37.  
  38. (* Procedure-Type for DialDo for overloading *)
  39.  
  40. TYPE DialDoProc = PROCEDURE (SYSTEM.ADDRESS, sINTEGER): sINTEGER;
  41.  
  42. CONST   MoveBox =       17; (* Neue Objekttypen, kompatibel zu *)
  43.         SpecButton =    18; (* Flydials von Julian Reschke     *)
  44.         SpecText =      19;
  45.         FrameBox =      20;
  46.         Helpbutton =    21; (* DERZEIT NICHT VON MAGIC UNTERSTšTZT!!! *)
  47.         CircleButton =  22;
  48.         ThreeState   =  23; (* 3-Status-Button! State 3 = Selected & Checked! *)
  49.         LongEdit =      24;     (* Erweiterter Objekttyp fr lange Editfelder *)
  50.  
  51. CONST   UndoButton =    14;     (* Flag 14 kennzeichnet einen Undobutton *)
  52.         HelpButton =    15;     (* Flag 15 kennzeichnet einen Helpbutton *)
  53.  
  54. (*-----------------------------------------------------------------------*)
  55.  
  56. PROCEDURE InitDials;
  57. (* Initialisiert die MagicDials. Wird normalerweise im Modulk”rper
  58.  * aufgerufen, und braucht nicht weiter beachtet zu werden.
  59.  *)
  60.  
  61. PROCEDURE DisposeDials;
  62. (* Gibt alle internen Datenstrukturen wieder frei. Wird bei mtAppl.ApplExit
  63.  * ausgefhrt und braucht nicht weiter beachtet zu werden.
  64.  *)
  65.  
  66. PROCEDURE NewDial (tree: SYSTEM.ADDRESS): BOOLEAN;
  67. (* Initialisiert die internen Dialogvariablen und muž vor Gebrauch der
  68.  * Dialogfunktionen fr jeden Objektbaum einmal aufgerufen worden sein.
  69.  * Bei FALSE stehen die M”glichkeiten der MagicDials fr den Objektbaum
  70.  * nicht zur Verfgung. Der Aufruf einer Routine aus diesem Modul kann
  71.  * dann einen Systemabsturz zur Folge haben.  Ein mehrfaches Aufrufen
  72.  * fr einen Objektbaum wird von der Prozedur ignoriert.
  73.  *)
  74.  
  75. PROCEDURE DisposeDial (tree: SYSTEM.ADDRESS);
  76. (* L”scht die interne Dialogvariable *)
  77.  
  78. (*-----------------------------------------------------------------------*)
  79.  
  80. PROCEDURE ObjcExtype (tree: SYSTEM.ADDRESS; entry, extyp: sINTEGER);
  81. (* Setzt erweiterten Typ *)
  82.  
  83. PROCEDURE GetObjcExtype (tree: SYSTEM.ADDRESS; entry: sINTEGER;
  84.                          VAR extyp, typ: sINTEGER);
  85. (* Liefert den erweiterten Typ, auch von GPROGDEF-Objekten, sofern diese
  86.  * mit mtXobjects installiert wurden
  87.  *)
  88.  
  89. PROCEDURE GetKbdState (): sBITSET;
  90. (* Diese Prozedur liefert den Status der Sondertasten (Shift, Alternate,
  91.  * Control etc. der bei _Rckkehr_ aus DialDo gltig war. Kann dazu benutzt
  92.  * werden, um im Zusammenhang mit SetUserkey bestimmte Aktionen auszul”sen.
  93.  * Idee: Dirk Steins (wer sonst?)
  94.  *)
  95.  
  96. CONST   CSCREEN =       0;
  97.         CMOUSE =        1;
  98.         CPOS =          2;
  99.  
  100. PROCEDURE DialCenter (tree: SYSTEM.ADDRESS; flag, x, y: sINTEGER;
  101.                       VAR rect: ARRAY OF LOC);
  102. (* Zentriert den Dialog.  Folgende Žnderung ist ab 3.30 wirksam: Der
  103.  * Dialog wird immer auf die im Eselsohr-Popup definierten Werte abgestimmt,
  104.  * ES SEI DENN, 'flag' = CPOS!!!  CSCREEN und CMOUSE haben somit keine
  105.  * Wirkung mehr, und sind nur noch aus Kompatibilit„tsgrnden vorhanden. 
  106.  * Default-Modus ist 'Zentrieren'.  
  107.  *
  108.  * Schon l„nger drin, aber nicht ausdrcklich erw„hnt: Bei Modus 'Zentrieren'
  109.  * wird der virtuelle Screendriver BIGSCREEN2 von Julian Reschke (SciLab)
  110.  * untersttzt, d.H, ist ein Bildschirmtreiber ber den VirtualScreen-Cookie
  111.  * installiert, wird natrlich nicht in den virtuellen Screen zentriert,
  112.  * sondern in dem gerade Sichtbaren Teil.
  113.  * 
  114.  * CPOS  Es wird auf die in x, y bergebene Pos gesetzt. šberbgelt
  115.  *       auch ein mit dem Eselsohr-Popup eingestellte Werte.
  116.  * CSCREEN, CMOUSE werden nicht mehr beachtet, sondern die Einstellungen
  117.  * des globalen Konfigs bernommen.
  118.  *
  119.  * rect enth„lt nach Aufruf die entsprechende Fl„che des Dialogs
  120.  *)
  121.  
  122.  
  123. CONST   DSTART =        0;
  124.         DGROW =         1;
  125.         DSHRINK =       2;
  126.         DFINISH =       3;
  127.         DDISABLE =      4;
  128.         DENABLE =       5;
  129.  
  130. PROCEDURE DialForm (tree: SYSTEM.ADDRESS; flag: sINTEGER;
  131.                     VAR small, big: ARRAY OF LOC);
  132. (* wie bei FormDial, nur daž bei DSTART tats„chlich der Hintergrund gebuffert
  133.  * wird und bei DFINISH wieder freigegeben wird.  small und big kommen aus-
  134.  * schliežlich bei DGROW und DSHRINK zum Einsatz.
  135.  *
  136.  * Zus„tzliche Flags DDISABLE und DENABLE:
  137.  * DDISABLE: Der Dialog wird im "Desktop-Grau" dargestellt, um zu verdeut-
  138.  * lichen, daž seine Funktionen derzeit nicht zu erreichen sind. Sinnvoll,
  139.  * wenn man ber einen Dialog einen anderen legt - der untere wird grau (nur
  140.  * die gesetzen Pixel).
  141.  * DENABLE: Stellt nach DDISABLE den Dialog wieder her.
  142.  *)
  143.  
  144. PROCEDURE DialDraw (tree: SYSTEM.ADDRESS; entry, depth: sINTEGER;
  145.                     clip: ARRAY OF LOC; clipping: BOOLEAN);
  146. (* Zeichnet den bergebenen Dialog, handling wie ObjcDraw.
  147.  * clip ist ein optionales Clipping-Rechteck, das beachtet wird, wenn
  148.  * clipping TRUE bergeben wird.
  149.  *)
  150.  
  151. PROCEDURE DialChange (tree: SYSTEM.ADDRESS; entry, state: sINTEGER;
  152.                       clip: ARRAY OF LOC; clipping, set, draw: BOOLEAN);
  153. (* MagicDial-Version von ObjcChange:
  154.  * tree =       Adresse des Objektbaums
  155.  * entry =      Nummer des Objekts
  156.  * state =      Status-Flag, das ge„ndert werden soll
  157.  * clip =       Clipping-Rechteck
  158.  * clipping =   TRUE, wenn geclipt werden soll
  159.  * set =        TRUE, wenn Status gesetzt werden soll
  160.  * draw =       TRUE, wenn das Objekt neugezeichnet werden soll
  161.  *)
  162.  
  163. PROCEDURE DialDo (tree: SYSTEM.ADDRESS; edit: sINTEGER): sINTEGER;
  164. (* form_do fr MagicDials, edit ist die Nummer des ersten EDITABLE-
  165.  * Objekts. Hat der Dialog kein EDITABLE, sollte edit aus Geschwindig-
  166.  * keitsgrnden auf -1 gesetzt werden.
  167.  *)
  168.  
  169. (*------------------------------------------------------------------------*
  170.  * Definitionen fr Userhandler                                           *
  171.  *------------------------------------------------------------------------*)
  172.  
  173. TYPE UserHandler = PROCEDURE ( (* tree *)    SYSTEM.ADDRESS,
  174.                                (* mx *)      sINTEGER,
  175.                                (* my *)      sINTEGER,
  176.                                (* scan *)    sINTEGER,
  177.                                (* kbshift *) sBITSET,
  178.                                (* event *)   sBITSET,
  179.                                (* edobj *)   sINTEGER): sBITSET;
  180.  
  181. (* Eine Prozedur dieses Typs wird - sofern sie fr einen Dialog installiert
  182.  * wird - von DialDo bei Abarbeitung eines Dialogs aufgerufen. Die Prozedur
  183.  * wird entsprechend dem Callmode bei der Installation aufgerufen.
  184.  *
  185.  *  tree =       Adresse des Objektbaumes
  186.  *  mx, my =     Mausposition
  187.  *  scan =       Scancode
  188.  *  kbshift =    Status der Sondertasten
  189.  *  event =      welcher Event wars (Mausklick, Tastatur, keins von beidem)
  190.  *  edobj =      aktuelles Edit-Objekt
  191.  *
  192.  * Als Returnwert ist ein BITSET vorgesehen. Derzeit gibt es aber noch keine
  193.  * Flags, die von DialDo ausgewertet werden. Ist das BITSET leer, macht
  194.  * DialDo weiter wie gewohnt, ist es nicht leer, bricht DialDo mit -1 ab.
  195.  *)
  196.  
  197. CONST CallByEvent =    0;
  198.         (* UserHandler sofort nach einem Event rufen *)
  199.       CallByHandling = 1;
  200.         (* UserHandler nach der Objektbehandlung durch DialDo aufrufen *) 
  201.       CallByTimer =    2;
  202.         (* DialDo verwendet normalerweise keinen Timer-Event bei seiner
  203.          * Eventabfrage. Ist jedoch ein UserHandler mit CallByTimer 
  204.          * installiert, wird ein MultiEvent mit Timer bei 10 Millisekunden
  205.          * ausgefhrt. Es wird wie bei CallByEvent verfahren, also der User-
  206.          * Handler vor dem Behandeln des Objekts durch DialDo aufgerufen.
  207.          *)
  208.       CallByRect =    3;
  209.         (* Hiermit wird ein Userhandler als MouseRect-Event installiert.
  210.          * Es wird wie bei CallByEvent verfahren, also der UserHandler vor
  211.          * dem Behandeln des Objekts durch DialDo aufgerufen.
  212.          *)
  213.       CallByMessage = 4;
  214.         (* Hier werden auf Message-Ereignisse reagiert.
  215.          * Es wird wie bei CallByEvent verfahren, also der UserHandler vor
  216.          * dem Behandeln des Objekts durch DialDo aufgerufen.
  217.          *)
  218.  
  219. PROCEDURE InstallHandler (tree: SYSTEM.ADDRESS; proc: UserHandler;
  220.                           callmode, timer, rmode: sINTEGER;
  221.                           rect: ARRAY OF LOC; mesag: SYSTEM.ADDRESS);
  222. (* Installiert eine Prozedur vom Typ UserHandler. 'callmode' bestimmt, in 
  223.  * welcher Weise die Prozedur aufgerufen wird (CallByEvent, CallByHandling,
  224.  * CallByTimer bzw. CallByRect).
  225.  *
  226.  * tree =       Adresse des Objektbaums
  227.  * proc =       Die UserHandler-Prozedur
  228.  * callmode =   Die Art der Behandlung
  229.  * timer =      Wert fr Timer-Event
  230.  * rmode =      Rechteck-Event-Modus (0 = Betreten; 1 = Verlassen)
  231.  * rect =       Rechteckt fr den Event
  232.  *)
  233.  
  234. PROCEDURE RemoveHandler (tree: SYSTEM.ADDRESS);
  235. (* Deinstalliert die Handleprozedur. *)
  236.  
  237.  
  238. CONST   UseSolid =      0;
  239.         UseEdit =       1;
  240.         UseALT =        2;
  241.         UseGrowbox =    3;
  242.         UseCenter =     4;
  243.         UseMouse =      5;
  244.         UsePos =        6;
  245.         Res7 =          7;
  246.         Res8 =          8;
  247.         Res9 =          9;
  248.         Res10 =        10;
  249.         Res11 =        11;
  250.         Res12 =        12;
  251.         Res13 =        13;
  252.         Res14 =        14;
  253.         UseConfig =    15;
  254.  
  255. PROCEDURE DialConfig (flag: sINTEGER; set: BOOLEAN);
  256. (* Setzt die Konfiguration der MagicDials.
  257.  *
  258.  * UseSolid =    TRUE = Solides Verschieben (Default), sonst mit Rahmen 
  259.  * UseEdit =     TRUE = Integriertes ObjcEdit (Default), sonst AES benutzten
  260.  * UseALT =      TRUE = ALTERNATE l”st Button aus (Default), sonst CONTROL
  261.  * UseGrowbox =  TRUE = Grow/ und Shrink-Boxen benutzen (Default)
  262.  * 
  263.  * Die folgenden Flags definieren, wohin die Dialogbox am Bildschirm 
  264.  * gezeichnet wird, egal was in DialCenter angegeben wurde. Alle Flags 
  265.  * sind nicht Default, damit eine grunds„tzliche Belegung ber DialCenter 
  266.  * gegeben ist.
  267.  *
  268.  * UseCenter =   TRUE = Dialogbox wird auf dem Schirm zentriert
  269.  * UseMouse =    TRUE = Dialogbox wird um die Mausposition zentriert
  270.  * UsePos =      TRUE = Dialogbox wird an letzter Position gezeichnet
  271.  *
  272.  * Res7..Res14 = Reserviert fr zuknftige Anwendungen
  273.  *
  274.  * UseConfig =   TRUE = Konfig-Popup zulassen (Default) 
  275.  *)
  276.  
  277. PROCEDURE GetDialConfig (): sBITSET;
  278. (* Liefert das augenblickliche Konfigurations-Set *)
  279.  
  280.  
  281. PROCEDURE SetUserkey (tree: SYSTEM.ADDRESS; object, scan: sINTEGER;
  282.                       kbstate: sBITSET; action, set: BOOLEAN);
  283. (* Setzt die vom Benutzer konfigurierbaren Tasten. Sinn und Zweck der šbung
  284.  * ist, daž der Dialog bei bestimmten Tastendrcken ohne direkte Wirkung auf
  285.  * den Dialog verlassen wird. Die Liste der Tasten wird fr jeden Dialog
  286.  * extra aufgebaut. Einmal aufgebaut, bleibt sie bis DisposeDial bestehen.
  287.  *
  288.  * tree =       Adresse des Objektbaumes
  289.  *
  290.  * object =     Die Nummer des Objekts, welches beim korrespondierenden
  291.  *              Tastendruck von DialDo returniert wird. ACHTUNG! Es wird
  292.  *              nicht kontrolliert, ob das Objekt auch existiert!
  293.  *
  294.  * scan =       Scancode der Taste die den Rcksprung aus DialDo veran-
  295.  *              lassen soll.
  296.  *
  297.  * kbstate =    Status der Sondertasten, der zus„tzlich zum Scancode
  298.  *              vorhanden sein muž.
  299.  *
  300.  * action =     Bei TRUE wird eine Bildschirmaktion ausgefhrt, so als
  301.  *              ob das Objekt angeklickt wurde.
  302.  *
  303.  * set =        Bei TRUE wird der Tastencode in die Liste eingetragen,
  304.  *              ansonsten gel”scht.
  305.  *)
  306.  
  307. PROCEDURE ResetUserkeys (tree: SYSTEM.ADDRESS);
  308. (* L”scht s„mtliche Userkey-Eintr„ge fr einen Objektbaum *)
  309.  
  310.  
  311. (* Fr die UserObjects werden einige objektunabh„ngige Routinen exportiert.
  312.  * Der geneigte Benutzer sollte eine genaue Vorstellung von dem haben,
  313.  * was er tun will; insbesondere sollte er den Sourcecode von mtDials
  314.  * aufmerksam studieren...
  315.  *)
  316.  
  317. PROCEDURE Rect (x, y, w, h, color: sINTEGER);
  318. (* Zeichnet eine Rechteckfl„che in Farbe color *)
  319.  
  320. PROCEDURE String (x, y, width: sINTEGER; VAR string: ARRAY OF CHAR;
  321.                   flags: sBITSET; center: BOOLEAN): sINTEGER;
  322. (* Zeichnet einen String, scannt dabei auch nach den '['-Shortcuts
  323.  * Dadurch werden nur Shortcuts erkannt, die auch wirklich gezeichnet 
  324.  * wurden!  Returniert einen eventuellen ShortCut als _Scancode_.
  325.  * Dieser muž dann nur noch mittels SetUserkey eingetragen werden.
  326.  *
  327.  * x =      X-Position in absoluten Koordinaten
  328.  * y =      Y-Position in absoluten Koordinaten
  329.  * width =  Wirkt im Zusammenhang mit center: Auf diese Breite wird
  330.  *          der String zentriert
  331.  * string = Der zu schreibende String
  332.  * flags =  Entspricht den Flags, die auch bei Buttons verwendet werden
  333.             In der Regel kann man hier den obState bergeben.
  334.  * center = String wird zentriert, wenn center = TRUE. Siehe width
  335.  *)
  336.  
  337. PROCEDURE Frame (x, y, w, h, thick: sINTEGER);
  338. (* Zeichnet einen Rahmen, thick bestimmt die Dicke *)
  339.  
  340. PROCEDURE Shadow (x, y, w, h, thick: sINTEGER);
  341. (* Zeichnet einen Schatten , thick bestimmt die Dicke *)
  342.  
  343. PROCEDURE Line (x, y, w, h: sINTEGER);
  344. (* Zeichnet eine Linie *)
  345.  
  346. PROCEDURE DrawButton (p: PtrPARMBLK): sBITSET;
  347. (* Zeichnet einen Knopf, eine Crossbox oder einen Button *)
  348.  
  349. PROCEDURE DialCharTable (VAR ch: CHAR): BOOLEAN;
  350. (* Ruft einen Standarddialog mit einer Zeichenauswahl auf. 
  351.  * TRUE: Zeichen wurde ausgew„hlt, steht dann in ch
  352.  *)
  353.  
  354. (* Erweiterungen fr Fensterdialoge *)
  355.  
  356. PROCEDURE HandleEvent (event : sBITSET;
  357.                        VAR x, y: sINTEGER;
  358.                        VAR button: sBITSET;
  359.                        VAR taste: sINTEGER;
  360.                        VAR kbshift: sBITSET;
  361.                        VAR scan: sINTEGER;
  362.                        VAR ascii: CHAR;
  363.                        VAR clicks: sINTEGER;
  364.                        tree: SYSTEM.ADDRESS;
  365.                        editable : BOOLEAN;
  366.                        VAR edit : sINTEGER;
  367.                        VAR pos : sINTEGER;
  368.                        VAR entry : sINTEGER
  369.                        ): BOOLEAN;
  370. (* Behandelt den Event fr einen Baum
  371.  * Wird fr WinDials ben”tigt
  372.  *)
  373.  
  374. PROCEDURE PrepDial (    t         : SYSTEM.ADDRESS;
  375.                         start     : sINTEGER;
  376.                     VAR editable  : BOOLEAN;
  377.                     VAR pos, edit : sINTEGER);
  378. (* Bereitet den Dialog vor, setzt die Userkeys und gibt die
  379.  * Editwerte zurck. Wird fr WinDials ben”tigt
  380.  *)
  381.  
  382. PROCEDURE ObjcEdit (tree: SYSTEM.ADDRESS; object: sINTEGER; VAR pos: sINTEGER;
  383.                     char, kind: sINTEGER);
  384. (* Das ObjcEdit der MagicDials. Wird fr WinDials ben”tigt
  385.  *)
  386.  
  387. PROCEDURE DisableMenu(menu: SYSTEM.ADDRESS; disable : BOOLEAN);
  388. (* Disablet ein Menu bei einem modalen Fensterdialog
  389.  * Wird fr WinDials ben”tigt
  390.  *)
  391.  
  392. PROCEDURE OverloadDialDo (newDialDo: DialDoProc): DialDoProc;
  393.  
  394. PROCEDURE IsOverloadedDialDo (): BOOLEAN;
  395.  
  396. END mtDials.
  397.